home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 726-750 / 729 / bbbbs / bbbbs54.lzh / rexx / bbsULDL.rexx < prev    next >
OS/2 REXX Batch file  |  1992-07-18  |  5KB  |  230 lines

  1. /*
  2.    $VER: 5.3 bbsULDL.rexx 18 Jul 1992 (18.7.92)
  3.       - counts upload/download statistics -
  4. copyright 1991 Richard Lee Stockton * FREELY DISTRIBUTABLE
  5.  
  6. */
  7.  
  8. HOW_MANY=25
  9. CALL PRAGMA('P',-2)
  10.  
  11. SIGNAL ON ERROR
  12. SIGNAL ON SYNTAX
  13. SIGNAL ON FAILURE
  14. NUMERIC DIGITS 14
  15.  
  16. inarg=''
  17. PARSE ARG inarg .
  18. test=COMPRESS(UPPER(inarg),' -')
  19. IF test='?' | test='H' | test='USAGE' | test='HELP' THEN
  20.   DO
  21.     SAY 'Usage: rx bbsULDL [filename or CLI]'
  22.     SAY
  23.     SAY 'CLI writes to the console.'
  24.     SAY 'If a filename or the letters CLI are not included,'
  25.     SAY 'writes to a file called Information/STATS.ULDL'
  26.   END
  27.  
  28. figarg='s:CONFIG.BBS'
  29. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  30. x=OPEN(f,figarg,'R')
  31. IF x=0 THEN
  32.   DO
  33.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
  34.     EXIT(20)
  35.   END
  36.  
  37. CALL SETCLIP('BBS_STAT','ON')
  38. lynes.=''
  39. DO i=1 TO 6
  40.   lynes.i=READLN(f)
  41. END
  42. CALL CLOSE(f)
  43.  
  44. compos=POS('/*',lynes.1)
  45. IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
  46.  
  47. bbsname = STRIP(lynes.1)
  48. sysop   = WORD(lynes.2,1)
  49. bbspath = WORD(lynes.6,1)
  50. IF ~EXISTS(bbspath) THEN
  51.   DO
  52.     SAY bbspath 'does not exist!'
  53.     EXIT(20)
  54.   END
  55. testchar=RIGHT(bbspath,1)
  56. IF testchar~='/' & testchar~=':' THEN bbspath=bbspath'/'
  57.  
  58. counts.=0
  59. namelist=''
  60. filelist.=''
  61. x=OPEN(f,bbspath'Lists/Files','R')
  62. IF x=0 THEN
  63.   DO
  64.     SAY 'Could not open' bbspath'Lists/Files!'
  65.     CALL SETCLIP('BBS_STAT')
  66.     EXIT(20)
  67.   END
  68. DO i=1
  69.   line=READLN(f)
  70.   IF EOF(f) THEN LEAVE i
  71.   filelist.i=line
  72. END
  73. filelist.0=i-1
  74. CALL CLOSE(f)
  75.  
  76. DO i=1 TO filelist.0
  77.   filenote=bbspath'FileNotes/'WORD(filelist.i,2)'/'WORD(filelist.i,3)
  78.   x=OPEN(f,filenote,'R')
  79.   IF x=0 THEN
  80.     DO
  81.       SAY filenote 'did not open!'
  82.       ITERATE i
  83.     END
  84.   line1=READLN(f)
  85.   line2=READLN(f)
  86.   line3=READLN(f)
  87.   CALL CLOSE(f)
  88.   size=WORD(line2,4)
  89.   dls=WORD(line2,7)
  90.   name=WORD(line3,2)
  91.   IF FIND(namelist,name)=0 THEN namelist=namelist name
  92.   counts.name.BYTES=counts.name.BYTES+size
  93.   counts.TOTAL.BYTES=counts.TOTAL.BYTES+size
  94.   counts.name.ULOADS=counts.name.ULOADS+1
  95.   counts.TOTAL.DLOADS=counts.TOTAL.DLOADS+dls
  96.   filelist.i.0=name
  97.   filelist.i.1=dls
  98.   filelist.i.2=size
  99. END
  100.  
  101. largest.=0
  102. DO nameindex=1 TO WORDS(namelist)
  103.   name=WORD(namelist,nameindex)
  104.   IF counts.name.BYTES>largest.HOW_MANY & name~=UPPER(sysop) THEN
  105.     DO
  106.       line=LEFT(name,20) LEFT(' ',21) RIGHT(comma(counts.name.BYTES),11) 'bytes'RIGHT(comma(counts.name.ULOADS),5) 'files'
  107.       largest.HOW_MANY=counts.name.BYTES
  108.       largest.HOW_MANY.0=line
  109.       DO j=HOW_MANY-1 TO 1 BY -1
  110.         jj=j+1
  111.         IF largest.jj<=largest.j THEN LEAVE j
  112.         temp=largest.jj
  113.         temp0=largest.jj.0
  114.         largest.jj=largest.j
  115.         largest.jj.0=largest.j.0
  116.         largest.j=temp
  117.         largest.j.0=temp0
  118.       END
  119.     END
  120. END
  121.  
  122. popular.=0
  123. DO i=1 TO filelist.0
  124.   IF filelist.i.1>popular.HOW_MANY THEN
  125.     DO
  126.       name=WORD(filelist.i,3)
  127.       line=RIGHT(filelist.i.1,4) LEFT(name,22) RIGHT(WORD(filelist.i,1),5) LEFT(WORD(filelist.i,2),18) LEFT(filelist.i.0,20)
  128.       popular.HOW_MANY=filelist.i.1
  129.       popular.HOW_MANY.0=line
  130.       DO j=HOW_MANY-1 TO 1 BY -1
  131.         jj=j+1
  132.         IF popular.jj<=popular.j THEN LEAVE j
  133.         temp=popular.jj
  134.         temp0=popular.jj.0
  135.         popular.jj=popular.j
  136.         popular.jj.0=popular.j.0
  137.         popular.j=temp
  138.         popular.j.0=temp0
  139.       END
  140.     END
  141. END
  142.  
  143.  
  144.  
  145. /* OUTPUT */
  146.  
  147. IF inarg='' THEN inarg=bbspath'Information/STATS.ULDL'
  148. IF UPPER(inarg)~='CLI' THEN
  149.   DO
  150.     CALL CLOSE(STDOUT)
  151.     CALL OPEN(STDOUT,inarg,'W')
  152.     IF x=0 THEN
  153.       DO
  154.         SAY inarg 'would not open for writing!'
  155.         CALL SETCLIP('BBS_STAT')
  156.         EXIT(20)
  157.       END
  158.   END
  159.  
  160. SAY LEFT('-',75,'-')
  161. SAY TRIM(CENTER('Upload/Download statistics through' DATE() 'at' TIME('C'),75))
  162. SAY TRIM(CENTER(bbsname,75))
  163. SAY TRIM(CENTER(comma(counts.TOTAL.BYTES) 'bytes in' comma(filelist.0) 'files uploaded by' comma(WORDS(namelist)) 'of' comma(WORDS(SHOWDIR(bbspath'Users'))) 'current users.',75))
  164. SAY LEFT('-',75,'-')
  165.  
  166. SAY
  167. SAY
  168. SAY CENTER('Top' HOW_MANY 'favorite files from' comma(counts.TOTAL.DLOADS) 'total downloads',75)
  169. SAY LEFT('-',75,'-')
  170. SAY '  DLoads' LEFT('Filename',22) 'File#' LEFT('Library',18) LEFT('Uploader',20)
  171. SAY LEFT('-',75,'-')
  172. DO i=1 TO HOW_MANY
  173.   IF popular.i=0 THEN LEAVE i
  174.   SAY RIGHT(i,2)'.' popular.i.0
  175. END
  176.  
  177. SAY
  178. SAY
  179. SAY CENTER('Top' HOW_MANY 'uploaders of files currently in the libraries (excludes sysop)',75)
  180. SAY LEFT('-',75,'-')
  181. DO i=1 TO HOW_MANY
  182.   IF largest.i=0 THEN LEAVE i
  183.   x=OPEN(f,bbspath'Users/'STRIP(WORD(largest.i.0,1)),'R')
  184.   IF x=0 THEN ITERATE i
  185.   CALL READLN(f)
  186.   CALL READLN(f)
  187.   city=READLN(f)
  188.   CALL CLOSE(f)
  189.   city=TRANSLATE(city,'     ','+-.*/')
  190.   DO j=WORDS(city) TO 1 BY -1
  191.     IF DATATYPE(WORD(city,j),'N') THEN city=STRIP(DELWORD(city,j,1))
  192.     IF UPPER(WORD(city,j))='USA' THEN city=STRIP(DELWORD(city,j,1))
  193.   END
  194.   city=SPACE(city,1)
  195.   SAY RIGHT(i,2)'.' OVERLAY(city,largest.i.0,22,21)
  196. END
  197. CALL SETCLIP('BBS_STAT')
  198.  
  199. EXIT;
  200.  
  201.  
  202. comma:
  203. ARG num .
  204. dgt=LENGTH(num)
  205. numtext=''
  206. IF dgt>3 THEN numtext=','RIGHT(num,3)
  207. IF dgt>6 THEN numtext=','LEFT(RIGHT(num,6),3)||numtext
  208. IF dgt>9 THEN
  209.   DO
  210.     numtext=','LEFT(RIGHT(num,9),3)||numtext
  211.     numtext=LEFT(num,dgt-9)||numtext
  212.   END
  213. ELSE IF dgt>6 THEN numtext=LEFT(num,dgt-6)||numtext
  214. ELSE IF dgt>3 THEN numtext=LEFT(num,dgt-3)||numtext
  215. ELSE numtext=num
  216. RETURN(numtext)
  217.  
  218.  
  219. SYNTAX:
  220. FAILURE:
  221. ERROR:
  222. SAY 'Line:' SIGL ERRORTEXT(RC)
  223. SAY
  224. SAY line1
  225. SAY line2
  226. SAY line3
  227. EXIT;
  228.  
  229. /* end of uldl.rexx */
  230.